Retour index

Traduction d'une boucle tantque en assembleur 68K

Retour niveau sup

Le dictionnaire des variables correspondant à l'algorithme est (visualiser l'algorithme):

Nom

Type

Catégorie

Allocation

num

entier.b

Variable

d0

denum

entier.b

Variable

d1

result

entier.b

Variable

d2

denum.result

entier.w

Variable

d3

 

Le choix de l'allocation est arbitraire. Ce choix est généralement guidé par les contraintes imposées par le cahier des charges. La notation entier.b n'est pas normalisée. Elle est appliquée au choix qui est fait ici d'implanter cet algorithme en assembleur 68K. Enfin, le fait qu'en assembleur, il n’est possible que de faire une opération par instruction, il est nécessaire d'ajouter une variable intermédiaire denum.result allouée dans d3. La traduction de l'algorithme donne :

 

début : clr.b d2      * result <- 0

        move.b d2,d3  * d3 <- result

        mulu.b d1,d3  * d3 <- result.denum

* tant que (result.denum < a)

tantque:     cmp.b d0,d3

             bcc fintq

* faire

         add.b #$1,d2    * result <- result + 1

         move.b d2,d3    * d3 <- result

         mulu.b d1,d3    * d3 <- result.denum

         bra tantque

* fin tant que

* si (result.denum < a) alors

fintq        cmp.b d3,d0

             bcs alors

* finsi

retour      rts  * fin du code

alors : sub.b #$1,d2  * result <- result – 1

        bra retour

Commentaires :

 


Comme le montre cet exemple, la boucle tant que débute par l'expression d'une condition (instruction cmp) et le branchement en fonction de la condition (sortie de la boucle) et se termine par un branchement inconditionnel (instruction bra) qui renvois au début de la boucle.

 


La structure de test si (condition) alors traitement commence elle aussi par l'expression de la condition (instruction cmp) suivit d'un branchement conditionnel et se termine aussi par un branchement inconditionnel mais qui ne renvoie pas au début mais au fin si.

Retour index

Suite